package com.hui.stock.mapper;

import com.hui.stock.pojo.domain.InnerMarketDomain;
import com.hui.stock.pojo.domain.StockBlockDomain;
import com.hui.stock.pojo.entity.StockMarketIndexInfo;
import org.apache.ibatis.annotations.Param;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Map;

/**
* @author ymh
* @description 针对表【stock_market_index_info(国内大盘数据详情表)】的数据库操作Mapper
* @createDate 2024-11-11 16:04:25
* @Entity com.hui.stock.pojo.entity.StockMarketIndexInfo
*/
public interface StockMarketIndexInfoMapper {

    int deleteByPrimaryKey(Long id);

    int insert(StockMarketIndexInfo record);

    int insertSelective(StockMarketIndexInfo record);

    StockMarketIndexInfo selectByPrimaryKey(Long id);

    int updateByPrimaryKeySelective(StockMarketIndexInfo record);

    int updateByPrimaryKey(StockMarketIndexInfo record);

    /**
     *  根据指定时间点查询对应的大盘编码对应的数据
     * @param curDate 指定时间点
     * @param marketCodes 大盘编码
     * @return
     */
    List<InnerMarketDomain> getMarketInfo(@Param("curDate") Date curDate, @Param("marketCodes") List<String> marketCodes);

    /**
     * 根据指定时间点查询板块中按照交易金额降序排序的前10条数据
     * @param curDate 指定时间点
     * @return
     */
    List<StockBlockDomain> getBlockInfo(@Param("curDate") Date curDate);

    /**
     * 根据指定时间区间升序返回每分钟的交易量
     * @param curDate 当前时间/最近的有效交易日收盘时间
     * @param openDate 开盘时间
     * @param markerCodes 国内大盘市场编码
     * @return
     */
    // @MapKey("")//TODO @MapKey 仅用于当返回类型是 Map<K, V> 时指定键字段。你的方法返回的是 List<Map>，因此 @MapKey 不需要，IDE 的提示是错误的。
    List<Map> getStockTradeAmt(@Param("curDate") Date curDate, @Param("openDate") Date openDate, @Param("markerCodes") List<String> markerCodes);

    /**
     * 获取当前分钟A股在各个涨跌区间股票的数量
     * @param curDate 当前时间（精确到分钟）
     * @return
     */
    List<Map> getStockUpDownScopeCount(@Param("curDate") Date curDate);

    /**
     * 批量插入国内大盘数据
     * @param list 插入数据列表
     * @return
     */
    int insertBatch(@Param("infos") List<StockMarketIndexInfo> list);
}
